#!/bin/bash

# 作为 root 用户运行，无需输入用户信息
user_name="root"
group_name="root"

# 设置 Python 脚本路径和工作目录
script_path="$(dirname "$(realpath "$0")")/../main.py"  # 使用当前脚本所在路径的上级目录作为 Python 脚本路径
work_dir="$(realpath "$(dirname "$(realpath "$0")")/../")"  # 使用 realpath 确保工作目录是绝对路径

# 应用的名称
app_name="xpredict"
service_file="/etc/systemd/system/${app_name}.service"

# 定义一个方法来停止运行中的进程
stop_processes() {
    port=$1
    process_name=$2
    echo "终止指定端口的进程"
    lsof -i:"$port" | awk 'NR>1 {print $2}' | xargs --no-run-if-empty kill -9
    echo "终止包含特定进程名的进程"
    ps -ef | grep "$process_name" | awk '{print $2}' | grep -v 'grep' | xargs --no-run-if-empty kill -9
}

# 检查服务是否已存在
if [ -f "$service_file" ]; then
    # 服务文件存在，询问用户是否删除之前的服务
    read -p "检测到已存在的服务 ${app_name}，是否删除之前的服务? (yes/no): " delete_service

    if [ "$delete_service" = "yes" ]; then
        echo "正在删除之前的服务..."

        # 停止并禁用服务
        systemctl stop "${app_name}"
        systemctl disable "${app_name}"

        # 删除服务文件
        rm -f "$service_file"
        echo "服务 ${app_name} 已删除。"
    else
        echo "未删除之前的服务。"
    fi
fi

# 让用户输入 conda 虚拟环境的名称
read -p "请输入conda虚拟环境的名称： " conda_env_name

# 自动检测 conda 安装路径
conda_path=$(which conda)

# 如果没有找到 conda，提示错误并退出
if [ -z "$conda_path" ]; then
    echo "错误：未找到 conda。请确保 conda 已安装并在 PATH 中。"
    exit 1
fi

# 获取conda的安装路径
conda_base=$(dirname "$(dirname "$conda_path")")

# 检查 conda 环境是否存在
env_exists=$(conda env list | grep -w "$conda_env_name")

if [ -z "$env_exists" ]; then
    echo "错误：指定的 conda 环境 '$conda_env_name' 不存在。"
    exit 1
fi

# 创建 systemd 服务单元文件路径
service_file="/etc/systemd/system/${app_name}.service"

# 生成 systemd 服务配置
echo "[Unit]
Description=这是xpredict实时预测工具
After=network.target

[Service]
ExecStart=/bin/bash -c 'source ${conda_base}/bin/activate ${conda_env_name} && python ${script_path}'
WorkingDirectory=${work_dir}
Restart=always
User=${user_name}
Group=${group_name}
Environment=PATH=${conda_base}/bin
KillMode=control-group
ExecStop=/bin/bash -c 'stop_processes 9090 \"shell/../main.py\"'

[Install]
WantedBy=multi-user.target" > "$service_file"

# 设置权限
chmod 644 "$service_file"

# 提示用户是否启用开机自启
read -p "是否启用开机自启? (yes/no): " enable_autostart
if [ "$enable_autostart" = "yes" ]; then
    systemctl enable "${app_name}"
    echo "已启用开机自启。"
else
    echo "未启用开机自启。"
fi

echo "Systemd 服务 ${app_name} 已成功创建。"
